package com.yizisu.playerlibrary.view.video_view.helper


import android.view.View
import androidx.lifecycle.LiveData
import com.yizisu.playerlibrary.IYzsPlayer

/**
 * 信息共享和交互配置类，
 * 默认需要一个公共的父view提供这个值，
 * 当然也可以重写所有实现了[IPlayerHelper]的view，重新实现这个函数
 */
interface IPlayerConfig {
    val player: IYzsPlayer<IYzsPlayer.Model>?
        get() = playerData.value?.second

    /**
     * 播放器回调的liveData
     */
    val playerData: LiveData<Pair<IYzsPlayer<@ParameterName("old") IYzsPlayer.Model>?,
            @ParameterName("new") IYzsPlayer<IYzsPlayer.Model>?>>

    fun updatePlayer(player: IYzsPlayer<IYzsPlayer.Model>?)

    /**
     * 滑动seek的回调
     */
    val seekBarEventData: LiveData<SeekbarEvent>
    fun updateSeekBarEvent(value: SeekbarEvent?)

    /**
     * 展示或者隐藏导航栏
     */
    val showOrHideControllerData: LiveData<Float/*0-1f 0 隐藏 1显示*/>
    fun updateShowOrHideController(value: Float?)

    /**
     * 滑动允许调节的最大时长
     */
    val maxSwipeDurationData: LiveData<Pair<Long/*短边*/, Long/*长边*/>>
    fun updateMaxSwipeDuration(value: Pair<Long/*短边*/, Long/*长边*/>?)

    /**
     * 是否没有开启屏幕锁
     */
    val screenNotLockData: LiveData<Boolean>
    fun updateScreenNotLock(value: Boolean?)

    /**
     * 动画控制操作栏显示隐藏
     */
    val playerControllerBarHelperData: LiveData<PlayerControllerBarHelper>
    fun updatePlayerControllerBarHelper(value: PlayerControllerBarHelper?)

    /**
     * 长按时播放倍速
     */
    val longPressedSpeedData: LiveData<Float>
    fun updateLongPressedSpeed(value: Float?)

    /**
     * 点击返回按钮回调
     */
    val clickBackData: LiveData<View>
    fun updateClickBack(value: View?)

    /**
     * 全屏切换处理
     */
    val fullScreenChangeData: LiveData<Boolean>
    fun updateFullScreenChange(value: Boolean?)

    val speedData: LiveData<List<Pair<Float, String>>>
    fun updateSpeed(value: List<Pair<Float, String>>?)
}